#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2025/9/2
# @Author  : YunZhen
# @File    : verify.py
# @Software: PyCharm
"""
验证下载的Python安装包的完整性和参数有效性
"""
import os
import re
from loguru import logger


def validate_platform(platform, supported_platforms):
    """验证平台参数有效性"""
    logger.info(f"验证平台类型是否正确: {platform}")
    if platform == 'all':
        return supported_platforms
    if platform in supported_platforms:
        return [platform]
    logger.error(f"无效平台: {platform}. 有效值为: all,{', '.join(supported_platforms)}")
    return False


def validate_versions(versions: list[str], supported_versions: list[str]) -> list[str]:
    """
    验证版本格式有效性并检查是否在支持列表中

    参数:
        versions (list[str]): 待验证的版本列表
        supported_versions (list[str]): 支持的版本列表

    返回:
        list[str]: 有效的、受支持的版本列表
    """
    # 初始化结果列表
    valid_versions = []
    invalid_versions = []

    logger.info(f"开始验证 {len(versions)} 个版本")

    # 预编译正则表达式提高效率
    version_pattern = re.compile(r'^\d+\.\d+\.\d+$')

    for ver in versions:
        # 验证版本格式
        if not version_pattern.match(ver):
            logger.warning(f"无效版本格式: '{ver}'. 应为 x.x.x 格式 (如: 3.8.10)")
            invalid_versions.append(ver)
            continue

        # 检查是否在支持列表中
        if ver not in supported_versions:
            logger.warning(f"版本 '{ver}' 不在支持列表中")
            invalid_versions.append(ver)
            continue

        # 有效的、受支持的版本
        valid_versions.append(ver)
        logger.debug(f"版本 '{ver}' 验证通过")

    # 结果统计与日志
    valid_count = len(valid_versions)
    invalid_count = len(invalid_versions)

    if valid_count:
        logger.info(f"验证完成: 找到 {valid_count} 个有效版本")
    else:
        logger.warning("未找到任何有效版本")

    if invalid_count:
        logger.warning(f"发现 {invalid_count} 个无效版本: {', '.join(invalid_versions)}")

    return valid_versions


async def verify_download(filepath, expected_size):
    """验证文件完整性"""
    actual_size = os.path.getsize(filepath)
    if actual_size == expected_size:
        print(f"✅ 下载验证通过: {actual_size} 字节")
        return True
    print(f"❌ 文件已存在，为下载完成: 预期 {expected_size}, 实际 {actual_size}")
    return False


def verify_files_exist(dir_paths: str):
    """验证目录是否合法"""
    for dir_path in dir_paths.split(','):
        if not os.path.exists(dir_path):
            logger.error(f"目录不存在: {dir_path}")
            return False
        if not os.path.isdir(dir_path):
            logger.error(f"路径不是目录: {dir_path}")
            return False
    return True
